(function(){
    return {
        import:commonImport.nesTable,
        init:function(){
            var _this=this;
            if (_this.params.sysRoleId == null) {
                DsModule.to("module/sysRole/index");
                return false;
            }
            var findSysPermissionBySysRoleId=function(){
                ajaxPost({
                    url:"sysRole/findSysPermissionBySysRoleId",
                    data:{sysRoleId:_this.params.sysRoleId},
                    success:function(data){
                        _this.data.sysRoleSysPermission=data.data;
                        _this.data.sysRoleSysPermissionMap={};
                        for(var k in data.data){
                            _this.data.sysRoleSysPermissionMap[data.data[k].id]=data.data[k];
                        }
                        _this.reload();
                    }
                });
            };
            ajaxPost({
                url:"sysPermission/findAll",
                success:function(data){
                    _this.data.sysPermission=data.data;
                    _this.data.sysPermissionTree=_this.toTree([],null);
                    _this.data.sysPermissionMap={};
                    for(var k in data.data){
                        _this.data.sysPermissionMap[data.data[k].id]=data.data[k];
                    }
                    findSysPermissionBySysRoleId();
                }
            });
        },
        data:{
            sysPermissionMap:[],
            sysRoleSysPermission:[],
            sysRoleSysPermissionMap:{},
            sysPermissionTree:{},
            sysPermission:[]
        },
        before:function(data){
            return data;
        },
        after:function() {
            var _this = this;
            _this.$(".nestable-show").nestable({
                expandEvent:function(_this){
                    var dataId=$(_this).parent().attr("data-id");
                    var data= $.cookie("sysPermissionExpand");
                    if(data){
                        var dataArray=JSON.parse(data);
                        dataArray[dataId]=true;
                        $.cookie("sysPermissionExpand",JSON.stringify(dataArray),{path:"/" ,expires:365});
                    }else{
                        var dataArray={};
                        dataArray[dataId]=true;
                        $.cookie("sysPermissionExpand",JSON.stringify(dataArray),{path:"/" ,expires:365});
                    }
                },
                collapseEvent:function(_this){
                    var dataId=$(_this).parent().attr("data-id");
                    var data= $.cookie("sysPermissionExpand");
                    if(data){
                        var dataArray=JSON.parse(data);
                        dataArray[dataId]=false;
                        $.cookie("sysPermissionExpand",JSON.stringify(dataArray),{path:"/" ,expires:365});
                    }else{
                        var dataArray={};
                        dataArray[dataId]=false;
                        $.cookie("sysPermissionExpand",JSON.stringify(dataArray),{path:"/" ,expires:365});
                    }
                }
            });
            var initNes=function(){
                var data= $.cookie("sysPermissionExpand");
                var dataArray={};
                if(data){
                    dataArray= JSON.parse(data);
                }
                if(Object.keys(dataArray).length>0){
                    _this.$(".nes-init").each(function(){
                        var dataId=$(this).attr("data-id");
                        if(dataArray[dataId]==null){
                            return;
                        }
                        if(dataArray[dataId]){
                            $(this).find(".expand").each(function (e) {
                                $(this).trigger("click");
                            });
                        }else{
                            $(this).find(".collapse").each(function (e) {
                                $(this).trigger("click");
                            });
                        }

                    });
                }else{
                    //默认关闭一级
                    _this.$(".nes-level-1").each(function(){
                        $(this).find(".collapse").each(function(e){
                            $(this).trigger("click");
                        });
                    });
                }
            }
            initNes();
            this.$(".e-stop-mousedown").mousedown(function (event) {
                event.stopPropagation();
            });
            _this.$(".e-check").each(function () {
                var id = $(this).attr("data-id");
                if (_this.data.sysRoleSysPermissionMap[id] != null) {
                    $(this).prop("checked", true);
                }
            });
            _this.$(".e-check").click(function () {
                var flag = $(this).is(':checked');
                //找到子元素
                var sysPermissionIds = [];
                sysPermissionIds.push($(this).attr("data-id"));
                $(this).closest(".dd-item").find(".dd-list").find(".e-check").each(function () {
                    $(this).prop("checked", flag);
                    sysPermissionIds.push($(this).attr("data-id"));
                });
                ajaxPost({
                    url: flag ? "sysRole/setSysPermission" : "sysRole/unSetSysPermission",
                    data: {"sysRoleId": _this.params.sysRoleId, sysPermissionIds: sysPermissionIds.join(",")},
                    success: function (data) {
                        toastr.success("配置权限成功");
                    }
                });
            });
        },

        toTree:function(treeData,parentId){
            var _this=this;
            var data=_this.data.sysPermission;
            for(var i=0;i<data.length;i++){
                if(data[i].parentId==parentId){
                    var children=_this.toTree([],data[i].id);
                    data[i].children=children;
                    treeData.push(data[i]);
                }
            }
            return treeData;
        }
    }
});